home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mush-7.1.1 / README < prev    next >
Encoding:
Text File  |  1990-05-02  |  25.1 KB  |  529 lines

  1. /* @(#)README        (c) copyright 9/15/89    (Dan Heller) */
  2.  
  3. Author:
  4.     Dan Heller
  5.  
  6. Network addresses:
  7.     argv@sun.com        argv@monet.berkeley.edu.
  8.     argv@garp.mit.edu        dheller@ucbcory.berkeley.edu
  9.  
  10. When sending mail, mail to the addresses in the order given.
  11.  
  12. Contained is the source for "Mail User's Shell" (MUSH), a "Mail User
  13. Agent" (MUA) that is designed to manage electronic mail on most UNIX
  14. systems.  That is, mush is used by users to read mail, sort it, edit
  15. it, delete it, or use it to act as an interface to send mail to others.
  16. A Mail Transport Agent (MTA) is the program which mush communicates with
  17. that actually -delivers- mail.
  18.  
  19. The Mush sources are copyright (c) 1986, 1987, 1988, 1989 by Dan Heller.
  20. Redistribution of the unmodified source code is permitted as long as all
  21. copyright notices remain intact and all other identifying notices remain
  22. in the code and in the binary.  This includes message headers on outgoing
  23. mail and the startup message.  Future releases may extract the release
  24. version from the message headers of mush-originated messages to aid in
  25. implementing features and providing backwards compatibility with previous
  26. versions.  Modification of the source for personal use is permitted.
  27. Modifications sent to the authors are humbly accepted and it is their
  28. perogative to make the mods official.  Only the "official" sources may be
  29. redistributed and no sale of the code or any part thereof is permitted
  30. without written consent from the authors.  Further, no part of the code
  31. may be used in any other product, free or otherwise, without consent from
  32. the authors.
  33.  
  34. With that out of the way...
  35.  
  36. Mush runs on various flavors of unix.  To build mush, you should identify
  37. which unix you are running:
  38.  
  39.     Sun (all versions from 2.0 and higher).
  40.     BSD (versions 4.2 and up)
  41.     System-V / Version 7 / System III (Bell Labs)
  42.     Xenix (this might be tricky)
  43.  
  44. You will need to copy "config.h-dist" to config.h and edit it to reflect
  45. the system dependencies described there.  These consist of "compile-time
  46. definitions and macros."
  47.  
  48. When it comes to "compile-time definitions", you may use one of two methods:
  49.  
  50.     #define DEFINITION    /* in the config.h file */
  51.     -DDEFINITION    /* in your makefile */
  52.  
  53. If the definition is of the form MACRO="string", then use:
  54.  
  55.     #define MACRO string
  56.     -DMACRO=string
  57.  
  58. Note that if you use definitions in the makefile, you should remove the
  59. corresponding definitions from config.h -- if you do not, the config.h
  60. definitions will override the -D definitions.  The compiler will usually
  61. print a warning message if this happens, but the result will still be wrong.
  62.  
  63. ---------------
  64. Which makefile to use:
  65.  
  66. If you are on a Sun Workstation:
  67.  
  68.     makefile.sun applies only to suns and creates a binary called "mush."
  69.     If the binary ends in "tool", then the graphics (suntools) mode will be
  70.     used by default on invocation.  Otherwise, you must specify -t for
  71.     toolmode on sun workstations.  The SUNTOOL define is used in the
  72.     makefile.sun in order to compile the suntools version.  You DO need
  73.     to be running SunView; old SunWindows (2.0+) no longer works.  Be sure
  74.     to follow the notes in the makefile.sun for SunOS-4.0 machines.
  75.  
  76.     If you know that you're not going to use the suntools mode then you
  77.     should use makefile.bsd so that SUNTOOL won't be defined and unnecessary
  78.     files will not be compiled so the binary will be smaller.
  79.  
  80.     Whether or not you define SUNTOOL, you should define one of SUN_3_5,
  81.     SUN_4_0, or SUN_4_1 depending on your SunOS version.  If SUNTOOL is
  82.     the only thing defined, SUN_4_0 will be used.
  83.  
  84. If you are on a BSD UNIX machine:
  85.  
  86.     You should use the makefile.bsd makefile.
  87.  
  88. If you are using XENIX:
  89.  
  90.     There is one makefile for xenix: makefile.xenix.  However, SCO-xenix
  91.     runs on either 80286 or 80386 architectures.  This makefiles has been
  92.     tuned for SCO's version of xenix.  This does not mean that it won't
  93.     work under other xenix versions -- however, some changes may have to
  94.     be made by hand.  If your xenix release is sco-xenix 2.2 or higher
  95.     then you must define USG. The libraries to use may be -ltinfo instead
  96.     of -lcurses -ltermlib.  This is because the curses package may use
  97.     termio instead of the sgtty data structure.  If you want to use termio
  98.     anyway, even if you're on an older xenix system (that supports termio),
  99.     then you may define USG anyway.
  100.  
  101.     Follow the hints in the makefile.xenix for compiling for 286 systems
  102.     or 386 systems.  It is *very likely* that the CFLAGS will have to be
  103.     modified -- specifically, the model size and the stack size options.
  104.     You should be very familiar with your xenix to know how to tune this
  105.     properly.
  106.  
  107. If you are on a System-V Bell labs machine:
  108.  
  109.     makefile.sys.v is for unix machines that are not running any flavor of
  110.     BSD and probably running a system-v flavor of unix -- this defines USG
  111.     so that termio will be used.
  112.  
  113.     SCO UNIX V.3.2 users will need to change the declaration of ttytype[]
  114.     in curses.c to be "extern unsigned char" when using terminfo-based
  115.     curses.  This may also be necessary with termcap-based curses.
  116.  
  117.     MicroPort sys-v users should probably remove the -O compiler option
  118.     from the makefile, and may have trouble with the msg_bit() macro
  119.     defined in mush.h.  It should be fairly trivial to generate an
  120.     equivalent function.
  121.  
  122.     Silicon Graphics Iris workstations should add -DDIRECTORY to the CFLAGS
  123.     in the makefile.  This prevents the portable directory routines from
  124.     being compiled in.
  125.  
  126. If you are using Ultrix:
  127.  
  128.     Start with makefile.bsd.
  129.  
  130.     For Ultrix 2.2, change LIBES in makefile.bsd from
  131.     LIBES= -lcurses -ltermlib
  132.     to 
  133.     LIBES= -lcurses -ltermcap
  134.  
  135.     For Ultrix V3.0, use the standard makefile.bsd LIBES, but add
  136.     -DSIGRET=void
  137.     to the CFLAGS, or add
  138.     #define SIGRET void
  139.     to config.h (see discussion below).
  140.  
  141. If you are using HP-UX:
  142.  
  143.     Use makefile.hpux.
  144.  
  145.     Versions 6.5 and 7.0 of HP-UX (not to be confused with the same
  146.     version numbers of Mush) have the Berkeley-style directory access
  147.     libraries.  Those using older versions should omit -DDIRECTORY
  148.     from the CFLAGS.  This will cause the portable directory access
  149.     routines in that file to be compiled.
  150.  
  151. When you decide on an appropriate makefile, _copy_ it to a new file called
  152. Makefile _before_ making any of local changes.  Please read the following
  153. sections for addtional configuration information.  In addition to changing
  154. compilation options as appropriate, you should examine the rules for the
  155. "install:" target.  Running "make" will NOT use this target by default;
  156. it is provided for your convenience only.
  157. ---------------
  158.  
  159. Your Mail Transport Agent:
  160. Sendmail:
  161.     Mush was originally designed to use sendmail as the Mail Transport Agent.
  162.     However, other MTA's will work.  The MTA you use should be defined in
  163.     config.h under the MAIL_DELIVERY macro define. By default,
  164.         /usr/lib/sendmail -i
  165.     is used -- the option, -i, tells sendmail not to accept "." on a line
  166.     by itself as an end-of-file marker.  This has been obsleted by "-oi",
  167.     but "-i" still works and is backwards compatible with older sendmails.
  168.  
  169. Delivermail:
  170.     Some mailers such as delivermail and MMDF use special strings to separate
  171.     messages stored in a folder.  Older delivermail versions would use "^C".
  172.     Whatever your system uses, if it is NOT "From " (just the first 5 chars
  173.     on a line matching "From "), then this string should be defined in
  174.     config.h with the MSG_SEPARATOR macro.
  175.  
  176. MMDF:
  177.     NOTE: MMDF sites can define MMDF and not worry about MSG_SEPARATOR.  See
  178.     config.h-dist if you run MMDF.
  179.  
  180.     Since MMDF can deliver users' mail in their home directories, there is
  181.     a define to specify this option: -DHOMEMAIL
  182.  
  183.     Since MMDF uses its own libraries to do file locking, you should add the
  184.     appropriate library to the LIBS list in your makefile.
  185.  
  186.     MMDF sites should probably NOT define PICKY_MAILER (see below).
  187.  
  188. All others:
  189.     Chances are, your MTA uses the "From " format to separate messges in
  190.     a folder.  This includes, /bin/mail, rmail, smail, execmail, and so on.
  191.     Unless you *know* otherwise, assume this to be the case with your MTA.
  192.  
  193.     If no MSG_SEPARATOR is specified, what mush looks for is a pattern of
  194.     From <string> <date format>
  195.     The "string" is usually the return address of the sender and the date
  196.     format is supposed to be in ctime(3) format.  Even still, some MTAs
  197.     don't conform completely to this standard and vary slightly in
  198.     implementation.  The function load_folder() (which reads in messages)
  199.     contains a scanf which looks for this format to verify that this is
  200.     indeed a new message being scanned.  If you install mush and find that
  201.     you are entering a shell, but mush indicates there are no messages in
  202.     the folder, it could be that you have a weird "From " line format and
  203.     the scanf() call needs to be either modified or removed.
  204.  
  205.     Machines that use mail transfer agents that *do not* use a colon-less
  206.     "From " line as a message separator should #define in config.h the string
  207.     MSG_SEPARATOR.  Since this string is usually control characters, you
  208.     need to specify actual ascii values for those characters.  Users of MMDF,
  209.     for example, may use "\001\001\001\001" since some mmdf versions use four
  210.     control-A's to separate messages.  This message separator assumes that
  211.     there is a carriage return at the end of the string.  Systems that use
  212.     sendmail need not concern themselves with this define.  MSG_SEPARATOR
  213.     should not contain a newline, except for MMDF.  The MSG_SEPARATOR must
  214.     match a complete line; a prefix will not work.
  215.  
  216. #defines specifically for your MTA:
  217.  
  218. MSG_SEPARATOR
  219.     See the discussion above.
  220.  
  221. UUCP
  222.     This should be defined if your MTA does not automatically create a
  223.     From: header *and* your machine talks to other computers via uucp.
  224.     If defined, the From: line created specifies the user's address in
  225.     UUCP format (host!user).  Otherwise, arpa format is used (user@host).
  226.     Also, return addresses generated from RFC822 route specs will be put
  227.     in UUCP format with a complete path.
  228.  
  229. MTA_EXIT
  230.     The exit code of a successful delivery of a message by your MTA.
  231.     This is typically 0, but MMDF sites should define 9 (see config.h-dist).
  232.  
  233. NO_COMMAS
  234.     If your mailer does *NOT* like commas between addresses (smail sites,
  235.     xenix and sys-v machines), then you should define NO_COMMAS.  Otherwise,
  236.     you will get mailer-daemon [type] messages back when trying to send mail
  237.     to multiple users.  Sendmail should not define this.
  238.  
  239. VERBOSE_ARG
  240.     If your mailer does NOT have a verbose option, then you should not have
  241.     VERBOSE_ARG defined.  Otherwise, define it to be whatever the verbose
  242.     argument is for your mailer.  The default is -v.
  243.  
  244. METOO
  245.     Sendmail uses the -m argument to say, "metoo" -- when sending to sendmail
  246.     aliases (e.g. mailing lists), sendmail will expand the alias, but if your
  247.     address appears in the expansion, you are excluded from getting your own
  248.     mail.  However, if you have the variable metoo set with your variables,
  249.     then the METOO argument is passed to sendmail to say, "I know I'm on this
  250.     mailing list, but send me a copy of my message even tho I sent it."  For
  251.     sendmail, this is -m.  If your mailer uses something else, then define
  252.     METOO_ARG in the config.h file.  If you don't have it (sys-v), then this
  253.     should not be defined.
  254.  
  255. PICKY_MAILER
  256.     Most RFC822 compliant mailers (sendmail) will add the headers From:
  257.     and Date: on outgoing mail.  If the user or UA sends these headers,
  258.     most MTAs will not append them automatically.  However, there are
  259.     certain MTAs which will not allow this -- these "picky mailers" will
  260.     precede such headers with a '>' and make the headers very ugly and
  261.     somewhat redundant or contradictory.  It's hard to determine whether
  262.     or not your MTA will do this without actually sending mail to yourself.
  263.     However, it is advised to set this *unless* your mailer is not RFC822-
  264.     compliant (used to be defined by OLD_MAILER in previous mush releases).
  265.  
  266.     PICKY_MAILER should NOT normally be defined when MMDF is defined.
  267.  
  268. DOT_LOCK
  269.     Different systems use different locking mechanisms.  By default,
  270.     mush uses one of flock(), locking(), or lockf() (depending on your
  271.     system).  Some  systems use a file called the same name as the file
  272.     you're locking with an appended ".lock" at the end (some Xenix's use
  273.     /tmp/$USER.mlk).  If you define DOT_LOCK, mush will first check for the
  274.     .lock file.  If it exists, mush loops until it goes away and then mush
  275.     creates it mode 600.  Regardless of whether you use dot-locking, mush
  276.     will continue to try to use flock(), or whatever.
  277.  
  278.     Dot-locking requires mush to have write access to the directory where
  279.     your mailbox exists.  Normally, this directory isn't writable by the
  280.     average user, so to do this you may have to sgid mush to the group id
  281.     of the owner of that directory.  Mush will get the effective gid at the
  282.     beginning of the program and immediately reset it to your real gid until
  283.     the time it needs to lock the file occurs.  It changes back to the sgid,
  284.     locks, then returns to normal.  There shouldn't be a security problem.
  285.  
  286.     If you don't know what any of this means, ignore DOT_LOCK.
  287.  
  288.     Another warning is that some MTA's don't even follow their own protocol.
  289.     System V, it has been reported, creates the .lock file without checking
  290.     to see if it exists (therefore ruining someone else's lock).
  291.  
  292. ---------------
  293. Signals:
  294.  
  295. SIGRET
  296.     When signals occur in unix, the program can identify a function to be
  297.     called whenever a specific signal interrupts the process.  That function
  298.     returns one of two types in unix: int and void.  Because the return value
  299.     of this function is always ignored, many unix systems are converting
  300.     their definition of this function from int to void.  Mush has a define:
  301.     SIGRET which defines what the function should return.
  302.  
  303.     By default, SIGRET is defined to be "int", except for SunOS4.0, where
  304.     it is defined to be "void".
  305.  
  306.     Some System-V, some Ultrix and some Xenix machines should also define
  307.     SIGRET to be void.  If you don't know, leave it alone.  If you guess
  308.     wrong, you will get compiler "warnings" on lines that read:
  309.     on_intr();
  310.     off_intr();
  311. ---------------
  312. Memory allocation:
  313.  
  314. INTERNAL_MALLOC
  315.     Mush depends on the xfree() function to detect invalid pointers, so
  316.     that they will not be incorrectly passed to free().  Some system
  317.     organizations make this very difficult, if not impossible.  80286-based
  318.     machines in certain memory models, AT&T 3b2s and 3b15s, and others have
  319.     these difficulties; VAX, Sun, Sequent, Apollo, and most 680x0 and many
  320.     80386-based machines do not.  Changes have been made to xfree() to
  321.     handle the AT&T machines, but if you aren't sure about your machine,
  322.     or if you get unexpected segmentation faults, define INTERNAL_MALLOC.
  323.     SysV users may want to define this anyway, because the internal malloc
  324.     may be faster than the default malloc(3).
  325.  
  326.     By default, INTERNAL_MALLOC is undefined.
  327.  
  328. ---------------
  329. Miscellaneous defines:
  330.  
  331. TIMEZONE
  332.     If this is defined, the string it is defined to is used as your timezone
  333.     regardless of what the system thinks your timezone is.  This is intended
  334.     for systems which have no functions for determining the timezone.  On
  335.     newer Gould BSD 4.3 systems, it is safe to use
  336.         #define TIMEZONE T->tm_zone
  337.     On other systems, it is better to define TIMEZONE as a string, e.g.
  338.         #define TIMEZONE "PST"    /* Or "-0800" for MH style */
  339.  
  340. DAYLITETZ
  341.     This should be defined to your Daylight Savings Time timezone string if
  342.     and only if you also define TIMEZONE (above).  Do not define this if you
  343.     use the Gould tm_zone.
  344.  
  345. VPRINTF
  346.     This should be defined if your system has the vprintf functions. You
  347.     *have* these functions if you are running:
  348.     o system V
  349.     o xenix
  350.     o Sun release 3.0 or higher.
  351.     If you are still not sure, try the following command from your shell:
  352.  
  353.     % ar t /lib/libc.a | grep vprintf
  354.  
  355.     If you have it, you'll probably get something like
  356.     vprintf.o
  357.     vsprintf.o
  358.     as output.  If you don't have it, you won't have any output.  If your
  359.     main C-libraries are not in /lib/libc.a, then find where they are and
  360.     try the same command using that file.  BSD machines before 4.3-tahoe
  361.     do not have vprintf().
  362.  
  363. ---------------
  364. The sprintf() function:
  365.     If you *know* your system's sprintf returns a char *, you can remove the
  366.     #define sprintf Sprintf
  367.     in strings.h.  Careful, not all BSD4.3 machines are alike!  If you don't
  368.     know for sure, don't change this define.
  369.  
  370. ---------------
  371. Regular expression defines:
  372.     Some systems have regcmp/regex as their regular expression matching
  373.     routines while others have re_comp/re_exec -- If you have regcmp,
  374.     you should define REGCMP so that you will use the routines regcmp()
  375.     and regex() as the regular expression composer/parser.  REGCMP should
  376.     normally be defined for xenix and System-V Unix.  If you don't have
  377.     REGCMP defined, then the routines re_comp() and re_exec() are used
  378.     (this is the default for mush).
  379.  
  380.     Note that some systems do not have either set of routines in the default
  381.     libraries.  You must find the library to use and add it to the list of
  382.     libraries to use.  If this is the case, your link will fail with the
  383.     errors that regex and re_comp are undefined functions.  Read your man
  384.     page for regex(3) to find where to locate those libraries.
  385.  
  386. ---------------
  387. The Berkeley directory(3) routines:
  388.     If your system has directory access routines compatible with BSD Unix
  389.     (opendir, readdir, closedir) you should define DIRECTORY in either the
  390.     makefile or config.h.  This is already reflected in the makefile.hpux.
  391.     See the notes above for other Sys-V-ish systems that may require this.
  392.     If DIRECTORY is not defined, replacement routines in glob.c are used.
  393.  
  394. ---------------
  395. The select() function call:
  396.     Mush uses select() to implement macros, mappings and bindings.  If your
  397.     system is a BSD system, then this is defined for you.  However, with the
  398.     advent of hybrid bsd/sys-v systems, you may not be able to set BSD, but
  399.     you know you still have select() --for such systems, define SELECT in
  400.     your makefile or in config.h.
  401.  
  402.     Newer xenix machines have this as so some system-v machines.  If you don't
  403.     define one of BSD or SELECT, mush will use another function although not
  404.     as optimal as select().
  405.  
  406. ---------------
  407. The default Mushrc startup file:
  408.     A default mushrc should be installed, containing local configuration
  409.     information (aliases or variable settings).  This can also provide
  410.     first-time users with a more friendly interface.  UCB mail's default
  411.     Mail.rc works, but no default file works also.  The location of the
  412.     default file should be defined in config.h.  To have no default Mushrc,
  413.     set the default to /dev/null.
  414.  
  415.     The Mushrc file supplied with the mush distribution is heavily commented
  416.     and uses several of mush's features in setting up the interface.  THIS
  417.     FILE IS NOT INTENDED TO BE USED WITHOUT LOCAL MODIFICATIONS!  If you
  418.     use this file, you should modify it so settings of the variables MAILRC,
  419.     ALTERNATE_RC, and ALT_DEF_RC correspond to the definitions in your
  420.     config.h file.  You should also examine and possibly delete the help
  421.     section for new users (creates the .mushuser/.mushexpert files), which is
  422.     included mainly as an example.  The Mushrc is designed to source the
  423.     ALT_DEF_RC, which is usually equivalent to the UCB mail Mail.rc.  This
  424.     eases the transition to mush for UCB sites, and allows aliases and
  425.     settings that should apply to both mush and mail to reside in a single
  426.     file.  UUCP sites may also want to uncomment the line which sets the
  427.     auto_route and known_hosts variables; be sure to modify known_hosts to be
  428.     an accurate list of your UUCP mail neighbors.
  429.  
  430.     Important Note to sys-v'ers who can't get their hostname from utsname(2)
  431.     (xenix, more?), the hostname should probably be set in the default Mailrc
  432.     defined in config.h.    set hostname=whatever
  433.  
  434.     If your system has a LAN or UUCP name returned by gethostname(3) and
  435.     an additional network mail (domain) name, you probably want to add the
  436.     domain name to the value of hostname.   set hostname="domain $hostname"
  437.     (where "domain" is your local domain name).  Sometimes, the domain name
  438.     is listed among the alternate names for the machine, which mush is able
  439.     to look up, but will not be the first name mush finds.  Since mush uses
  440.     the first name listed in $hostname when constructing From: lines and
  441.     the like, you may need to use a "set" in Mushrc to rearrange the list.
  442.  
  443.     For sun systems, the sun Mail Mailrc (/usr/lib/Mailrc) does not work
  444.     very well because sun's Mail is not standard /usr/ucb/Mail.  For this
  445.     reason, sun has not changed the default Mail.rc which still resides
  446.     in /usr/lib/Mail.rc (note this has the "." whereas the other file
  447.     does not).  The default config.h-dist reflects this.
  448.  
  449.     There is a supplied Mailrc file with mush, but this is only intended to
  450.     be used as an example of how to make mush look like ucbMail.  This is a
  451.     _reduction_ in functionality and its usage is not encouraged.  It is
  452.     provided for those who wish to "invisibly" replace UCB mail with mush.
  453.  
  454.     There is a Gnurc file, also supplied as an example, which can aid in
  455.     making mush's curses mode appear similar to gnu-emacs (NOT Rmail).
  456.  
  457.     The files sample.mushrc and advanced.mushrc are intended as samples of
  458.     individual users' ~/.mushrc files.  There is some overlap from Mushrc
  459.     in sample.mushrc; in particular, if you use Mushrc as the default file,
  460.     the sample.mushrc need not source ~/.mailrc.
  461.  
  462. ---------------
  463. Help files:
  464.     The help files should be placed somewhere which is readable and accessible
  465.     by all.  Failing to do so removes virtually the entire help facility's
  466.     ability to help anyone.  There is a help file (cmd_help) for command help
  467.     (e.g. "command -?"), and the file tool_help is for the graphics mode (Sun
  468.     workstations only).  You should define where you want these files in
  469.     config.h so at runtime, they can be accessed without error.  If for some
  470.     reason you can't define a location at run-time, you can change Mushrc
  471.     to set the variables $cmd_help and $tool_help to the correct locations.
  472.  
  473. ---------------
  474.  
  475. You should now be able to run make.  You may wish to use the target "install"
  476. to put the mush binary and the help and init files in their proper places; be
  477. sure to correct the destination directories in the Makefile you have selected,
  478. and to doublecheck file path names in the init files.
  479.  
  480. ---------------
  481. Maintenance:
  482.  
  483. If you want to use dbx or any other debugger, or to use your default tty
  484. driver, -e should be used as command line argument when you run the program.
  485. What this flag does is prevents your echo from being turned off and leaving
  486. cbreak off, thus, keeping your tty in a sane state.  This prevents the use
  487. of mappings and macros (map and map!).  However, curses mode will automatic-
  488. ally disable that mode.  The -e flag is highly discouraged.
  489.  
  490. If you have memory allocation checking and validation (sun 3.0+ ?) then
  491. define M_DEBUG in the makefile (main.c) and add the library
  492. /usr/lib/debug/malloc.o to the library list. Do this only if you
  493. find bugs in the program and suspect memory allocation errors. main.c
  494. has the code which sets the debugging level according to the value of
  495. an environment variable.  Because malloc-debugging is so cpu intensive,
  496. the tool mode program may get a SIGXCPU (cpu time limit exceeded)
  497. because of the large amount of opening and closing large pixrects and
  498. devices.  For this reason, SIGXPCPU is is caught in main.c.
  499.  
  500. The "warning" variable may be set (at runtime in your .mushrc or as
  501. a command: "set warning") to aid in finding runtime errors that aren't
  502. fatal.  You can also use the "debug" command:
  503.     debug 1    --    general trace messages
  504.     debug 3    --    verbose messages, MTA disabled
  505.     debug 4    --    really verbose messages
  506.     debug 5    --    free() disabled
  507.  
  508. If you ever get "Message N has bad date: <date string>" then note
  509. the FORMAT of that date and edit dates.c.  There are a number of
  510. "sscanf"s which you can see match known date formats.  Use them as
  511. examples and insert the new date format you have.
  512.  
  513. If Mush ever coredumps and you are suspicious about whether or not
  514. your folder (or spool directory) was removed, or if you were editing
  515. a letter, you should check for the files .mushXXXXXX and .edXXXXXXX.
  516. Unless something incredibly awful has happened, Mush won't die without
  517. asking if you want to save the .mushXXXXX file and if you actually want
  518. it to dump core.  Note that if you run mush from .suntools and there is
  519. a core dump, it probably wants to do some IO with the console and may
  520. hang (not exit) because it doesn't know it can't talk to you.  If mush
  521. is killed by SIGHUP, it won't remove the .mushXXXXXX file, but it won't
  522. tell you about it either (unfortunately).
  523.  
  524. Bare-bones line-mode mush (no CURSES) and tool mode (SUNTOOL) pass lint
  525. with a small number of errors, mostly about long assignments losing accuracy.
  526. The SysV code has not been linted as thoroughly as the rest.  Curses doesn't
  527. lint very well, but even when you lint mush with CURSES defined, it mainly
  528. complains about the unused curses globals in curses.h.
  529.